package com.javacoo.swing.jxbrowser.engine;

import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.WindowConstants;

import com.javacoo.swing.jxbrowser.BaseBrowser;
import com.teamdev.jxbrowser.chromium.Browser;
import com.teamdev.jxbrowser.chromium.SearchParams;
import com.teamdev.jxbrowser.chromium.SearchResult;
import com.teamdev.jxbrowser.chromium.events.FinishLoadingEvent;
import com.teamdev.jxbrowser.chromium.events.LoadAdapter;
import com.teamdev.jxbrowser.chromium.swing.BrowserView;

/**
 * 寻找文本
 * <li></li>
 *
 * JxBrowser API提供允许在当前加载的网页上的功能：
 *
 *     查找指定的文本
 *     高亮显示所有匹配
 *     选择第一个匹配的文本
 *
 * 要在加载的网页上查找指定的文本，请使用Browser.findText（）方法。此方法返回SearchResult实例，该实例提供对搜索结果的访问，例如匹配数和所选匹配的索引。
 *
 * 注意： 浏览器仅通过加载文档上的可见内容执行搜索。如果由于CSS规则而无法在网页上显示某些文本，则浏览器在搜索期间不会浏览此内容。此外，浏览器不会搜索大小为0x0的文档上的文本，因此请确保浏览器组件可见且其大小不为空。
 *
 * 要清除网页上的突出显示（搜索结果）并取消搜索，请使用 Browser.stopFindingText（StopFindAction操作） 方法
 *
 * @author: duanyong@jccfc.com
 * @since: 2020/9/24 9:05
 */
public class FindingText extends BaseBrowser {
    public static void main(String[] args) {
        final Browser browser = new Browser();
        BrowserView browserView = new BrowserView(browser);

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.add(browserView, BorderLayout.CENTER);
        frame.setSize(700, 500);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

        browser.addLoadListener(new LoadAdapter() {
            @Override
            public void onFinishLoadingFrame(FinishLoadingEvent event) {
                if (event.isMainFrame()) {
                    SearchParams request = new SearchParams("CowSwing");
                    // Find text from the beginning of the loaded web page.
                    SearchResult result = browser.findText(request);
                    System.out.println(result.indexOfSelectedMatch() + "/" +
                        result.getNumberOfMatches());
                    // Find the same text again from the currently selected match.
                    result = browser.findText(request);
                    System.out.println(result.indexOfSelectedMatch() + "/" +
                        result.getNumberOfMatches());
                }
            }
        });
        browser.loadURL(BASE_URL);
        //browser.loadHTML("<html><body><p>Find me</p><p>Find me</p></body></html>");
    }
}
